#include <iostream>
using namespace std;

class Complex{
public:
    //构造函数
    Complex(int x, int y)
    :_x(x),_y(y)
    {     }

    //输出重载
    friend 
        ostream & operator<<(ostream & os, Complex & rhs);
        
    // 重载 +
    // 重载函数第一个参数，会自调用this，第一个参数就是 c + b 的c这个是自动成参数的
    // 第二个参数是传入的 b对象的拷贝(函数返回值是临时对象)
    // 因为是简单的相加操作，b对象应该要用const关键字限制
    // 普通成员函数的重载
    //Complex operator+(const Complex & rhs){
    //    int x = _x + rhs._x;
    //    int y = _y + rhs._y;
    //    return Complex(x, y);
    //}

    // 使用fried 友元函数的重载
    // 此要传递的参数除了右操作数，还有左操作数
   friend 
       Complex operator+(Complex & lhs,Complex & rhs);
private:
    int _x;
    int _y;
};

Complex operator+(Complex &lhs, Complex & rhs){
    int x = lhs._x + rhs._x;
    int y = lhs._y + rhs._y;
    return Complex(x, y);
}

ostream & operator<<(ostream & os, Complex & rhs){
    os << "_x=" << rhs._x << " _y=" << rhs._y;
    return os;
}

void test(){
    Complex c(1,2);
    Complex b(1,2);
    Complex a = c + b;
    cout << a << endl;
}

int main(int atgc, char * argv[])
{
    test();
    return 0;
}

